# -*- coding: utf-8 -*-
# @Time : 2024/3/11 3:31 PM 
# @Author : Wayne
# @Email : 1
# @File : t_time.py
# @Project : young_python_demo
# @DESCRIPTION :

from datetime import datetime, timedelta

'''
获取当前时间文本函数
%Y-%m-%d %H:%M:%S
%Y-%m-%d
相关格式自己改变为自己需要的类型

'''


def get_current_datetime():
    from datetime import datetime
    current_datetime = datetime.now()
    current_datetime_str = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
    return current_datetime_str


'''
将毫秒级别的时间戳转为自己需要的时间格式类型
%Y-%m-%d %H:%M:%S
%Y-%m-%d
相关格式自己改变为自己需要的类型
参考地址：https://tool.lu/timestamp/
如：1710641787000 就是北京时间 2024-03-17 10:16:27
如果是秒级别，就将 dt = datetime.datetime.fromtimestamp(timestamp / 1000.0) 改为 
dt = datetime.datetime.fromtimestamp(timestamp)
'''


# 时间戳转日期时间函数，输入参数timestamp为13位时间戳，数字，返回参数formatted_datetime为文本
def timestamp_to_datetime(timestamp):
    import datetime
    dt = datetime.datetime.fromtimestamp(timestamp / 1000.0)
    formatted_datetime = dt.strftime('%Y-%m-%d %H:%M:%S')
    return formatted_datetime


'''
传入时间文本转时间戳函数
时间格式可以自己定义的，看具体需求自己格式 %Y-%m-%d %H:%M:%S
如：2024-03-17 10:16:27 时间格式 %Y-%m-%d %H:%M:%S'，返回1710641787
如：2024-03-17 时间格式 %Y-%m-%d，返回1710641787 返回 1710604800
'''


def datetime_to_timestamp(datetime_text):
    import time
    time_struct = time.strptime(datetime_text, '%Y-%m-%d')
    timestamp = time.mktime(time_struct)
    return int(timestamp)




"""
获取当前时间的时间戳（单位：秒）
"""
def get_current_timestamp():
    import datetime
    return int(datetime.datetime.now().timestamp())

"""
获取当前时间的时间戳（单位：毫秒秒）
"""
def get_current_timestamp_ms():
    import datetime
    return int(datetime.datetime.now().timestamp() * 1000.0)



"""
计算两时间相差多少天，取了abs绝对值，
默认加1天，否则当天就是0l，此是根据各自业务场景判断是否加 1
start_date 开始时间
end_date 结束时间
"""


def calculate_two_day_differ_num(start_date, end_date):
    from datetime import datetime
    start_datetime = datetime.strptime(start_date, "%Y-%m-%d")
    end_datetime = datetime.strptime(end_date, "%Y-%m-%d")
    delta = end_datetime - start_datetime
    days = delta.days
    # 是否为负数就看自己加abs
    # 当天学完是为1天，那么就+1
    return abs(days) + 1


"""
日期时间计算函数（支持天、小时、分钟、秒），start_time起始日期，duration时长，time_unit时间单位(天：days、小时：hours，分钟：minutes，秒：seconds)
如：
1、当前时间
end_time = get_current_datetime()
start_time = add_time(end_time, -1, "hours")
2、固定时间
end_time = "2024-03-17 00:00:00"
start_time = add_time(end_time, -1, "hours")
print(start_time)
"""

def add_time(start_time, duration, time_unit):
    from datetime import datetime, timedelta
    start_date = datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S")
    if time_unit == "days":
        new_date = start_date + timedelta(days=duration)
    elif time_unit == "hours":
        new_date = start_date + timedelta(hours=duration)
    elif time_unit == "minutes":
        new_date = start_date + timedelta(minutes=duration)
    elif time_unit == "seconds":
        new_date = start_date + timedelta(seconds=duration)
    else:
        return "Invalid time unit!"
    new_time = new_date.strftime("%Y-%m-%d %H:%M:%S")
    return new_time

